`
https://leetcode.cn/problems/successful-pairs-of-spells-and-potions/
`

/**
 * @param {number[]} spells
 * @param {number[]} potions
 * @param {number} success
 * @return {number[]}
 */
var successfulPairs = function (spells, potions, success) {
  // 获取最大的咒语
  const maxP = Math.max(...potions)
  // 计算 potions 对应的值有多少个
  const count = new Array(maxP + 1).fill(0)
  for (const p of potions) {
    count[p]++
  }
  // 计算 count 的后缀和
  const countSuf = new Array(maxP + 1).fill(0)
  countSuf[maxP] = count[maxP]
  for (let i = maxP - 1; i >= 0; i--) {
    countSuf[i] = countSuf[i + 1] + count[i]
  }
  // 计算每个 spell 对应的结果
  return spells.map((s) => {
    // 计算出至少需要多少 potion 才能成功
    // 向上取整确保能从 countSuf 拿到更小的值
    const target = Math.ceil(success / s)
    // 如果 target 超过了 maxP 说明没有任何 potion 能够成功
    // 否则直接返回 countSuf[target] 即可
    return target <= maxP ? countSuf[target] : 0
  })
};